package com.tonyodev.fetch2core.server;

import org.jetbrains.annotations.NotNull;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.SocketAddress;

/**
 * FileResourceTransporter
 *
 * @since 2021-05-20
 */
public interface FileResourceTransporter extends FileResourceTransporterWriter {
    /**
     * BUFFER_SIZE
     */
    int BUFFER_SIZE = 8192;

    /**
     * 是否关闭
     *
     * @return 是否关闭
     */
    boolean isClosed();

    /**
     * 链接
     *
     * @param socketAddress 地址
     */
    void connect(@NotNull SocketAddress socketAddress);

    /**
     * receiveFileRequest
     *
     * @return FileRequest
     */
    FileRequest receiveFileRequest();

    /**
     * receiveFileResponse
     *
     * @return FileResponse
     */
    FileResponse receiveFileResponse();

    /**
     * 读取字节
     *
     * @param byteArray 字节数组
     * @param offset 位置
     * @param length 长度
     * @return 值
     */
    int readRawBytes(@NotNull byte[] byteArray, int offset, int length);

    /**
     * 获取InputStream
     *
     * @return InputStream
     */
    InputStream getInputStream();

    /**
     * 获取OutputStream
     *
     * @return OutputStream
     */
    OutputStream getOutputStream();

    /**
     * 关闭
     */
    void close();
}
